package eSn.Web.Core;

//http://wenku.baidu.com/view/d98f1119227916888486d752.html

import java.io.IOException;

import javax.servlet.*;
import javax.servlet.http.*;

public class JSPManager {
	private ServletContext app;	
	private HttpServletRequest rq;
	private HttpServletResponse rp;
	private HttpSession si;

	
	public JSPManager(HttpServletRequest rq,HttpServletResponse rp){
		this.rq = rq;
		this.rp = rp;
		this.si = rq.getSession();
		this.app = si.getServletContext();
	}
	
	//== get组 来源为 request ===============================================================================================
	/***
	 * 取得通讯协议及版本
	 * @return 协议及版本，如HTTP/1.1
	 */
	public String getProtocol(){
			return rq.getProtocol();
	}
	
	/***
	 * 取得通讯协议名称
	 * @return 协议名称，如HTTP
	 */
	public String getProtocolName(){
		return this.getProtocol().substring(0, this.getProtocol().indexOf("/")).toLowerCase();
	}
	
	/***
	 * 取得通讯协议版本
	 * @return 协议名称，如1.1
	 */
	public Double getProtocolVer(){
		String v = this.getProtocol().substring(this.getProtocolName().length()+1, this.getProtocol().length());
		return Double.valueOf(v);
	}
	
	/***
	 * 取得提交模式
	 * @return 提交模式 get|post
	 */
	public String getMethod(){
		return rq.getMethod();
	}
	
	
	public String getHeaderAccept(){
		return rq.getHeader("accept");
	}
	public String getHeaderHost(){
		return rq.getHeader("host");
	}
	public String getHeaderAcceptEncoding(){
		return rq.getHeader("accept-encoding");
	}
	public String getHeaderUserAgent(){
		return rq.getHeader("user-agent");
	}
	public String getHeaderAcceptLanguage(){
		return rq.getHeader("Accept-Language");
	}
	
	/***
	 * 取得服务器名称
	 * @return 服务器名称，如localhost
	 */
	public String getServerName(){
		return rq.getServerName();
	}
	
	/***
	 * 取得服务器IP
	 * @return IP地址，如192.168.4.32
	 */
	public String getServerIP(){
		return rq.getLocalAddr();
	}
	
	/***
	 * 取得服务器端口号
	 * @return 端口号，整型，如80
	 */
	public int getServerPort(){
		return rq.getServerPort();
	}
		
	/***
	 * 取得服务器相对路径
	 * @return 相对路径，如/index.jsp
	 */
	public String getPath(){
		return rq.getRequestURI();
	}
	/***
	 * 当前页名称
	 * @return 页名称，如index.jsp
	 */
	public String getPageName(){
		return rq.getServletPath().substring(1, rq.getServletPath().length());
	}
	
	/***
	 * 取得完整URL
	 * @return URL，如http://localhost:8080/index.jsp
	 */
	public String getURL(){
		String protocol = this.getProtocolName() + "://";
		
		if (this.getServerPort() == 80){
			return  protocol  + this.getServerName() + this.getPath();
		}else{
			return protocol + this.getServerName() + ":" + String.valueOf(this.getServerPort()) + this.getPath();
		}
	}
	
	/***
	 * 取得客户机IP
	 * @return IP地址，如192.168.4.12
	 */
	public String getClientIP(){
		return rq.getRemoteAddr();
	}
	
	
	/***
	 * 取得客户机端口号
	 * @return IP地址，如80
	 */
	public int getClientPort(){
		return rq.getRemotePort();
	}
	
	//== set组 来源为 Response ===============================================================================================
	
	/***
	 * 指定HTTP内容标识，如 text/html
	 */
	public void setContentType(String ct){
		rp.setContentType(ct);
	}
	
	//写入页面
	public void Writer(Object o) throws IOException{
		rp.getWriter().println(o.toString());
	}
	public void WriteBR() throws IOException{
		rp.getWriter().println("<br />");
	}
	public void WriteHR() throws IOException{
		rp.getWriter().println("<hr />");
	}	
	//到得参数值，如没有为null
	public String getParameter(String name){
		return rq.getParameter(name);
	}

	//跳转到指定的URL
	public void gotoURL(String url) throws IOException{
		rp.sendRedirect(url);
	}
	
	/***
	 * 取得Web根目录
	 * @return 根目录 如 C:\Root
	 */
	public String getWebRootPath(){
		return app.getRealPath("");
	}

	/***
	 * 取得Web-inf目录
	 * @return 根目录 如 C:\Root\WEB-INF
	 */
	public String getWebINFPath(){
		return this.getWebRootPath() + "\\WEB-INF";
	}
	
	/***
	 * 取得Web根目录
	 * @return 根目录 如 C:\Root\WEB-INF\lib
	 */
	public String getWebLibPath(){
		return this.getWebRootPath() + "\\WEB-INF\\lib";
	}

	/***
	 * 取得Web-inf目录
	 * @return 根目录 如 C:\Root\WEB-INF\classes
	 */
	public String getWebClassPath(){
		return this.getWebRootPath() + "\\WEB-INF\\classes";
	}	
	
	
}
